package com.examples.demo3;

import com.google.inject.Guice;
import com.google.inject.Inject;
import lombok.val;

/**
 * 一个接口有多个实现，这样通过@Inject和Module都难以直接实现，但是这种现象确实是存在的，
 * 于是Guice提供了其它注入方式来解决此问题。比如下面的自定义注解。
 */
public class MultiInterfaceServiceDemo {
    @Inject
    @WWW
    private Service wwwService;
    @Inject
    @Home
    private Service homeService;

    public static void main(String[] args) {
        val misd = Guice.createInjector(binder -> {
                    binder.bind(Service.class).annotatedWith(WWW.class).to(WWWService.class);
                    binder.bind(Service.class).annotatedWith(Home.class).to(HomeService.class);
                }
        ).getInstance(MultiInterfaceServiceDemo.class);
        misd.homeService.execute();
        misd.wwwService.execute();
    }
}
